Repository navigation
[PWGHF] First draft of Omegac0 to OmegaPi QA workflow - #18126
mtorresc15 wants to merge 15 commits into
Conversation
|
O2 linter results: ❌ 0 errors, |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
The new executables lack build registration, and selector issues can alter cuts or fatally terminate ML workflows.
Review effort: Balanced
Findings: 4
Open (7)
Register QA analysis task source in CMake · New Guard ML inference for out-of-range candidate pT · New Register QA selector source in CMake · New Register QA tree creator source in CMake · New Use normalized V0 chi-square for threshold cuts · New Apply configurable pT-dependent bachelor-pion cuts · New Correct documentation to describe neutral Omegac decay · New
What changed in this PR
Adds QA workflows for comparing DCAFitter and KFParticle Ωc⁰→Ωπ reconstruction.
Changes:
- Adds QA candidate selection and output trees.
- Adds reconstruction-specific ML features.
- Adds data/MC analysis modes with optional ML and centrality.
| File | Description |
|---|---|
PWGHF/TableProducer/treeCreatorOmegac0ToOmegaPiQa.cxx |
Defines detailed QA output tables. |
PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPiQa.cxx |
Implements selection, PID, ML, and QA monitoring. |
PWGHF/D2H/Tasks/taskOmegac0ToOmegaPiQa.cxx |
Adds data and MC analysis modes. |
PWGHF/Core/HfMlResponseOmegacToOmegaPiQa.h |
Defines DCAFitter and KFParticle ML features. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| inputFeatures.emplace_back(candidate.GETTER()); \ | ||
| break; \ | ||
| } | ||
| namespace o2::analysis |
There was a problem hiding this comment.
| namespace o2::analysis | |
| namespace o2::analysis |
| // Mass window | ||
| Configurable<double> v0MassWindow{"v0MassWindow", 0.01, "V0 mass window"}; | ||
| Configurable<double> cascadeMassWindow{"cascadeMassWindow", 0.01, "Cascade mass window"}; | ||
| Configurable<double> invMassCharmBaryonMin{"invMassCharmBaryonMin", 2.3, "Lower limit invariant mass spectrum charm baryon"}; // 2.4 Omegac0 only |
There was a problem hiding this comment.
| Configurable<double> invMassCharmBaryonMin{"invMassCharmBaryonMin", 2.3, "Lower limit invariant mass spectrum charm baryon"}; // 2.4 Omegac0 only | |
| Configurable<double> invMassCharmBaryonMin{"invMassCharmBaryonMin", 2.3, "Lower limit invariant mass spectrum charm baryon"}; |
| Configurable<bool> usePidTpcOnly{"usePidTpcOnly", false, "Perform PID using only TPC"}; | ||
| Configurable<bool> usePidTpcTofCombined{"usePidTpcTofCombined", true, "Perform PID using TPC & TOF"}; |
There was a problem hiding this comment.
| Configurable<bool> usePidTpcOnly{"usePidTpcOnly", false, "Perform PID using only TPC"}; | |
| Configurable<bool> usePidTpcTofCombined{"usePidTpcTofCombined", true, "Perform PID using TPC & TOF"}; | |
| Configurable<bool> usePidTpcOnly{"usePidTpcOnly", true, "Perform PID using only TPC"}; | |
| Configurable<bool> usePidTpcTofCombined{"usePidTpcTofCombined", false, "Perform PID using TPC or TOF"}; |
| // registry.add("hSelMassLam", "hSelMassLam;status;entries", {HistType::kTH1D, {axisSel}}); | ||
| // registry.add("hSelMassCasc", "hSelMassCasc;status;entries", {HistType::kTH1D, {axisSel}}); | ||
| // registry.add("hSelMassCharmBaryon", "hSelMassCharmBaryon;status;entries", {HistType::kTH1D, {axisSel}}); |
There was a problem hiding this comment.
| // registry.add("hSelMassLam", "hSelMassLam;status;entries", {HistType::kTH1D, {axisSel}}); | |
| // registry.add("hSelMassCasc", "hSelMassCasc;status;entries", {HistType::kTH1D, {axisSel}}); | |
| // registry.add("hSelMassCharmBaryon", "hSelMassCharmBaryon;status;entries", {HistType::kTH1D, {axisSel}}); |
| // Distance of Closest Approach(DCA) | ||
| if (candidate.dcaV0Dau() > dcaV0DauMax) { | ||
| return false; | ||
| } | ||
| registry.fill(HIST("hSelStatusLf"), 8.0); | ||
|
|
||
| if (candidate.dcaCascDau() > dcaCascDauMax) { | ||
| return false; | ||
| } |
There was a problem hiding this comment.
Are these two quantities always positive?
| using MyEventTable = soa::Join<aod::Collisions, aod::EvSels>; | ||
| using MyEventTableWithFT0M = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>; |
There was a problem hiding this comment.
| using MyEventTable = soa::Join<aod::Collisions, aod::EvSels>; | |
| using MyEventTableWithFT0M = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>; | |
| using MyEventTable = soa::Join<aod::Collisions, aod::EvSels>; | |
| using MyEventTableWithFT0M = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>; |
Use proper names for these two tables, e.g., CollsSel
| } else { | ||
| // Not available yet | ||
| } |
There was a problem hiding this comment.
| } else { | |
| // Not available yet | |
| } | |
| } |
| Produces<o2::aod::HfOmegac0ToOmegaPiLites> rowCandidateLite; | ||
| Produces<o2::aod::HfKfOmegacFulls> rowKfCandidateFull; | ||
| Produces<o2::aod::HfKfOmegacLites> rowKfCandidateLite; |
There was a problem hiding this comment.
I would have only one table for the DCA method and one for the KFParticle one
| } | ||
|
|
||
| template <int svReco, int tableSize, bool useCentrality, typename MyEventTableType, typename T> | ||
| void fillCandidate(const T& candidate, int8_t flagMc, int8_t originMc, bool collisionMatched, float centrality = -999.f) |
There was a problem hiding this comment.
Here all the particles are filled in the tree, without checking if the particle pass the selections. Please have a look at how to implement the check to select only candidates passing the cuts. You can also do that with a filter on the table.



First draft of the QA workflow for the Omegac0 to OmegaPi analysis.
This PR introduces dedicated QA versions of the candidate selector, tree creator, analysis task, and ML response to allow a more detailed validation of the Omegac0 to OmegaPi analysis workflow.
The main additions are:
The implementation is based on the existing Omegac0 to OmegaPi analysis workflow and is intended to facilitate validation and comparison of the DCAFitter and KFParticle reconstruction and selection strategies.
This PR is opened as a draft for preliminary review and feedback.